{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "ML-MotEx-Colab.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "authorship_tag": "ABX9TyPmgMbi+ZQ0lXZJehr2Hs2H",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/AndySAnker/ML-MotEx/blob/main/ML_MotEx_Colab.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<h1><center> Welcome to ML-MotEx </center></h1>\n",
        "\n",
        "**Github:** https://github.com/AndySAnker/ML-MotEx\n",
        "\n",
        "**Paper:** Extracting Structural Motifs from Pair Distribution Function Data of Nanostructures using Explainable Machine Learning https://www.nature.com/articles/s41524-022-00896-3\n",
        "\n",
        "**Questions:** andy@chem.ku.dk\n",
        "\n",
        "Use this script to use ML-MotEx to extract a structural motif from a dataset. This script does only handle Pair Distribution Function (PDF) data but ML-MotEx can in principle handle any data.\n",
        "\n",
        "If you have already fitted the dataset with multiple structures or you have have another type of data than PDF please go on to step 3 halfway through the script.\n",
        "\n",
        "# First install python packages"
      ],
      "metadata": {
        "id": "inAkwrhMtEfJ"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "%%capture\n",
        "!sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test\n",
        "!sudo apt-get update\n",
        "!sudo apt-get -y install gcc-4.9\n",
        "!sudo apt-get upgrade libstdc++6\n",
        "\n",
        "!pip install ase shap xgboost bayesian-optimization\n",
        "!git clone https://github.com/AndySAnker/ML-MotEx.git\n",
        "\n",
        "get_ipython().kernel.do_shutdown(True)"
      ],
      "metadata": {
        "id": "_w_GJCPBzOoA"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# First download Anaconda"
      ],
      "metadata": {
        "id": "YF57OI7rzSId"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "%%capture\n",
        "%%bash \n",
        "MINICONDA_INSTALLER_SCRIPT=Miniconda3-latest-Linux-x86_64.sh\n",
        "MINICONDA_PREFIX=/usr/local\n",
        "wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT\n",
        "chmod +x $MINICONDA_INSTALLER_SCRIPT\n",
        "./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX\n"
      ],
      "metadata": {
        "id": "s_QNc_Z7tdaU"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Download DiffPy-CMI"
      ],
      "metadata": {
        "id": "B0yRGbLKtfSl"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "%%capture\n",
        "!conda create -n diffpy -c defaults -c diffpy python=3.7 diffpy-cmi pandas --yes\n",
        "!cp -r /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy.srfit-3.0.0-py3.7.egg/diffpy/* /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy/\n",
        "!cp -r /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy.structure-3.0.1-py3.7.egg/diffpy/* /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy/\n",
        "!cp -r /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy.utils-3.0.0-py3.7.egg/diffpy/* /usr/local/envs/diffpy/lib/python3.7/site-packages/diffpy/\n",
        "\n",
        "import sys\n",
        "sys.path.insert(1, \"/usr/local/envs/diffpy/lib/python3.7/site-packages\")"
      ],
      "metadata": {
        "id": "XuVXdl3ktfdC"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# import modules, set seed parameters and import functions"
      ],
      "metadata": {
        "id": "MBZxEr5ctgFI"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "%%capture\n",
        "import numpy as np\n",
        "import matplotlib as mpl\n",
        "import matplotlib.cm\n",
        "import matplotlib.pyplot as plt\n",
        "import time, random, shap\n",
        "from scipy.optimize.minpack import leastsq\n",
        "from diffpy.Structure import Structure, Atom\n",
        "from diffpy.srfit.pdf import PDFContribution, PDFParser, PDFGenerator\n",
        "from diffpy.srfit.fitbase import FitRecipe, FitResults, Profile, FitContribution\n",
        "from diffpy.srreal.pdfcalculator import DebyePDFCalculator\n",
        "from multiprocessing import Pool\n",
        "from functools import partial\n",
        "from ase.io import read\n",
        "from google.colab import output, files\n",
        "import xgboost as xgb\n",
        "from sklearn.model_selection import cross_val_score\n",
        "from sklearn.metrics import mean_squared_error\n",
        "from bayes_opt import BayesianOptimization\n",
        "import pandas as pd\n",
        "\n",
        "random.seed(14)\n",
        "np.random.seed(14)"
      ],
      "metadata": {
        "id": "-NU9B66atC-R"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def Load_starting_model(starting_model):\n",
        "    \"\"\"This function loads the structure\"\"\"\n",
        "\n",
        "    # Read structure and divide it into two lists: Atoms we want to iterate (W) and atoms we do not iterate (O)\n",
        "    struct=[]\n",
        "    with open(starting_model, 'r') as fi:\n",
        "        for line in fi.readlines():\n",
        "            sep_line=line.strip('{}\\n\\r ').split()\n",
        "            if len(sep_line)==4: #  tillader andre informationer i xyz filen some ikke skal laeses\n",
        "                struct.append(sep_line)\n",
        "    elements=np.array(struct)[:,0]\n",
        "    xyz=(np.array(struct)[:,1:].astype(float))\n",
        "    \n",
        "    return elements, xyz\n",
        "\n",
        "def format_XYZ(starting_model, allowed_atoms):\n",
        "\t# Read structure and divide it into two lists: Atoms we want to iterate and atoms we do not iterate.\n",
        "\t# Save the file in this new format and get number of atoms that we iterate.\n",
        "\tpermutable_struct = []\n",
        "\tnonpermutable_struct = []\n",
        "\twith open(starting_model, 'r') as fi:\n",
        "\t\tfor line in fi.readlines():\n",
        "\t\t\tsep_line=line.strip('{}\\n\\r ').split()\n",
        "\t\t\tif len(sep_line)==4: #  tillader andre informationer i xyz filen some ikke skal laeses\n",
        "\t\t\t\tif sep_line[0] in allowed_atoms:\n",
        "\t\t\t\t\tpermutable_struct.append(sep_line)\n",
        "\t\t\t\telse:\n",
        "\t\t\t\t\tnonpermutable_struct.append(sep_line)\n",
        "\tstruct = permutable_struct + nonpermutable_struct\n",
        "\n",
        "\tNew_XYZ = open(starting_model, \"w\")\n",
        "\tNew_XYZ.write(str(len(struct)) + \"\\n\\n\")\n",
        "\tfor i in range(len(struct)):\n",
        "\t\tNew_XYZ.write(str(struct[i]).replace(\"[\", \"\").replace(\"]\", \"\").replace(\"'\", \"\").replace(\",\", \"\") + \"\\n\")\n",
        "\tNew_XYZ.close()\n",
        "\n",
        "\tNum_permutable_atoms = len(permutable_struct)\n",
        "\treturn Num_permutable_atoms\n",
        "  \n",
        "def structure_catalogue_maker(Number_of_structures, Number_of_atoms, lower_atom_number, higher_atom_number):\n",
        "    \"\"\"This function makes a shuffled list containing 'Number_of_structures' number of lists which each is \n",
        "    'Number_of_atoms' long and is randomly distributed with 0's and 1's whereas the minimum number of 1's are \n",
        "    'lower_atom_number' and the maximum number of 1's are 'higher_atom_number'.\"\"\"\n",
        "    \n",
        "    print (\"Starting to make a structure catalogue with: \", str(Number_of_structures) + \" structure from the starting model.\")\n",
        "    print (\"The structure will have between \" + str(lower_atom_number) + \" and \" + str(higher_atom_number) + \" atoms\")\n",
        "    structure_catalogue = []\n",
        "    for i in range(Number_of_structures):\n",
        "        one_count = random.randint(lower_atom_number, higher_atom_number)\n",
        "        zero_count = Number_of_atoms  - one_count\n",
        "        my_list = [0]*zero_count + [1]*one_count\n",
        "        random.shuffle(my_list)\n",
        "        my_list.insert(0, one_count)\n",
        "        structure_catalogue.append(my_list)\n",
        "    print (\"Permutations Succeeded\")\n",
        "    return structure_catalogue\n",
        "    \n",
        "def fitting(structure_catalogue, atom_ph, Qmin, Qmax, Qdamp, rmin, rmax, plot, index):\n",
        "    \"\"\"This function takes in a 'starting_model', and an 'index' from the 'structure_catalogue'. It generates the \n",
        "    corresponding structure and fit it to the 'Experimental_Data'.\"\"\"\n",
        "    \n",
        "    # Read structure and divide it into two lists: Atoms we want to iterate (W) and atoms we do not iterate (O)\n",
        "    stru = read(starting_model)\n",
        "    xyz = stru.get_positions()\n",
        "    xyz_W = xyz[:NumW].copy()\n",
        "    xyz_O = xyz[NumW:len(xyz)].copy()\n",
        "    keep_O = np.zeros(len(xyz_O))\n",
        "    h = 0\n",
        "    # Cycle through W atoms and delete W according to index 0's from permutation\n",
        "    permutations = np.asarray(structure_catalogue)[:,1:]\n",
        "    for j in range(len(xyz_W)):\n",
        "        if permutations[index][j] == 0:\n",
        "            xyz_W = np.delete(xyz_W,j - h,0)\n",
        "            h = h+1   \n",
        "    # Cycle through all atoms that is not iteratable and test if it is within the threshold distance. Delete atoms with no bonds\n",
        "    for j in range(len(xyz_O)):        \n",
        "        for k in range(len(xyz_W)):\n",
        "            dist = np.linalg.norm(xyz_W[k] - xyz_O[j])\n",
        "            if dist < threshold:    \n",
        "                keep_O[j] = 1\n",
        "                break\n",
        "    h = 0            \n",
        "    for j in range(len(xyz_O)):\n",
        "        if keep_O[j] == 0:\n",
        "            xyz_O = np.delete(xyz_O,j - h, 0)\n",
        "            h += 1\n",
        "            \n",
        "    # Create structure for iterable (W) and non-iterable (O) atoms and combine them\n",
        "    W_cluster = Structure([Atom('W', xi) for xi in xyz_W])\n",
        "    O_cluster = Structure([Atom('O', xi) for xi in xyz_O])\n",
        "    cluster = W_cluster + O_cluster\n",
        "    \n",
        "    # Make a standard cluster refinement using Diffpy-CMI\n",
        "    # Import the data and make it a PDFprofile. Define the range of the data that will be used in the fit.\n",
        "    pdfprofile = Profile()\n",
        "    pdfparser = PDFParser()\n",
        "    pdfparser.parseFile(Experimental_Data)\n",
        "    pdfprofile.loadParsedData(pdfparser)\n",
        "    pdfprofile.setCalculationRange(xmin = rmin, xmax = rmax)\n",
        "\n",
        "    # Setup the PDFgenerator that calculates the PDF from the structure\n",
        "    pdfgenerator_cluster = PDFGenerator(\"G\")\n",
        "    # Add the profile and both generators to the PDFcontribution\n",
        "    pdfcontribution = FitContribution(\"pdf\")\n",
        "    pdfcontribution.setProfile(pdfprofile, xname=\"r\") \n",
        "    pdfcontribution.addProfileGenerator(pdfgenerator_cluster)\n",
        "    \n",
        "    pdfgenerator_cluster.setQmin(Qmin)\n",
        "    pdfgenerator_cluster.setQmax(Qmax)\n",
        "    pdfgenerator_cluster._calc.evaluatortype = 'OPTIMIZED'\n",
        "    pdfgenerator_cluster.setStructure(cluster, periodic = False)\n",
        "\n",
        "    # Use scaling factors proportional to molar content\n",
        "    pdfcontribution.setEquation('mc*G')\n",
        "\n",
        "    # Define the recipe to do the fit and add it to the PDFcontribution\n",
        "    recipe = FitRecipe()\n",
        "    recipe.addContribution(pdfcontribution)\n",
        "\n",
        "    # Avoid too much output during fitting \n",
        "    recipe.clearFitHooks()\n",
        "\n",
        "    # Add the scale factor.\n",
        "    recipe.addVar(pdfcontribution.mc, 1.0, tag = \"scale\")\n",
        "    \n",
        "    # Add the instrumental parameters to the two generators\n",
        "    pdfgenerator_cluster.qdamp.value = Qdamp\n",
        "    \n",
        "    # Add the delta2 parameters, and make sure it cannot take unphysical values\n",
        "    recipe.addVar(pdfgenerator_cluster.delta2, 0, name = \"delta2_cluster\", tag = \"delta2\")\n",
        "\n",
        "    # Add ADP and \"cell\" for the cluster\n",
        "    phase_cluster = pdfgenerator_cluster.phase\n",
        "    atoms = phase_cluster.getScatterers()\n",
        "    lat = phase_cluster.getLattice()\n",
        "\n",
        "    recipe.newVar(\"zoomscale1\", 1.0, tag = \"lat\")\n",
        "    recipe.newVar(\"zoomscale2\", 1.0, tag = \"lat\")\n",
        "    recipe.newVar(\"zoomscale3\", 1.0, tag = \"lat\")\n",
        "    recipe.constrain(lat.a, 'zoomscale1')\n",
        "    recipe.constrain(lat.b, 'zoomscale2')\n",
        "    recipe.constrain(lat.c, 'zoomscale3')\n",
        "\n",
        "    W_cluster = recipe.newVar(\"W_Biso_cluster1\", 0.4, tag = 'adp_w')\n",
        "    O_cluster = recipe.newVar(\"O_Biso_cluster1\", 0.4, tag = 'adp_o')\n",
        "\n",
        "    for atom in atoms:\n",
        "      if atom.element.title() == atom_ph:\n",
        "            recipe.constrain(atom.Biso, W_cluster)\n",
        "      elif atom.element.title() == \"O\":\n",
        "            recipe.constrain(atom.Biso, O_cluster)\n",
        "\n",
        "    recipe.restrain(\"zoomscale1\", lb = 0.99, ub = 1.01, sig = 0.001)\n",
        "    recipe.restrain(\"zoomscale2\", lb = 0.99, ub = 1.01, sig = 0.001)\n",
        "    recipe.restrain(\"zoomscale3\", lb = 0.99, ub = 1.01, sig = 0.001)\n",
        "    \n",
        "    #free parameters are set\n",
        "    recipe.fix('all')\n",
        "    recipe.free(\"scale\", \"lat\")\n",
        "\n",
        "    # Turn off printout of iteration number.\n",
        "    #recipe.clearFitHooks()\n",
        "\n",
        "    # We can now execute the fit using scipy's least square optimizer.\n",
        "    leastsq(recipe.residual, recipe.getValues())\n",
        "    \n",
        "    # We calculate the goodness-of-fit, Rwp\n",
        "    g = recipe.pdf.profile.y\n",
        "    gcalc = recipe.pdf.evaluate()\n",
        "    rfactor1 = np.sqrt(sum((g - gcalc)**2) / sum((g)**2))\n",
        "    \n",
        "    # if plot == 1 it will also plot the fit\n",
        "    if plot == 1:\n",
        "        print (\"FIT RESULTS\\n\")\n",
        "        res1 = FitResults(recipe)\n",
        "        print (res1)\n",
        "\n",
        "        # Plot the observed and refined PDF.\n",
        "        # Get the experimental data from the recipe\n",
        "        r = recipe.pdf.profile.x\n",
        "        gobs = recipe.pdf.profile.y\n",
        "\n",
        "        # Get the calculated PDF and compute the difference between the calculated and measured PDF\n",
        "        gcalc = recipe.pdf.evaluate()\n",
        "        baseline = 1.1 * gobs.min()\n",
        "        gdiff = gobs - gcalc\n",
        "\n",
        "        # Plot!\n",
        "        plt.figure()\n",
        "        plt.plot(r, gobs, 'bo', label=\"G(r) data\")\n",
        "        plt.plot(r, gcalc, 'r-', label=\"G(r) fit\")\n",
        "        plt.plot(r, gdiff + baseline, 'g-', label=\"G(r) diff\")\n",
        "        plt.plot(r, np.zeros_like(r) + baseline, 'k:')\n",
        "        plt.xlabel(r\"$r (\\AA)$\")\n",
        "        plt.ylabel(r\"$G (\\AA^{-2})$\")\n",
        "        plt.legend()\n",
        "\n",
        "        plt.show()\n",
        "    return rfactor1\n",
        "\n",
        "def fitting_multiprocess(structure_catalogue, atom_ph, Qmin, Qmax, Qdamp, rmin, rmax, SaveName, cores=1):\n",
        "    \"\"\"This function runs the refinement of all the structures in the structure catalogue using multiprocessing\"\"\"\n",
        "    start_time = time.time()\n",
        "    values = []\n",
        "    # Set up multiprocessing refinement\n",
        "    fitindex = range(len(structure_catalogue))\n",
        "    p = Pool(processes=cores)\n",
        "    plot = 0\n",
        "    func = partial(fitting, structure_catalogue, atom_ph, Qmin, Qmax, Qdamp, rmin, rmax, plot)\n",
        "    results = p.map(func, fitindex)\n",
        "    p.close()\n",
        "    p.join()\n",
        "    \n",
        "    # Start refinement and append results to lists\n",
        "    for i in fitindex:\n",
        "        if i % 100 == 0:\n",
        "            print (\"I have now fitted: \", str(i) + \" structures out of \" + str(len(structure_catalogue)))\n",
        "        rw = results[i]\n",
        "        values.append(i)\n",
        "        values.append(rw)\n",
        "    values = np.reshape(values,(int(len(values)/2) , 2))\n",
        "    \n",
        "    # Save results in format that is suitable for Machine Learning\n",
        "    print (\"Best fit\")\n",
        "    print (values[np.argmin(values[:,1])])\n",
        "    print(\"Total execution time: %.3fs\" % (time.time()-start_time))\n",
        "    Result = np.column_stack([values, np.asarray(structure_catalogue)[values[:,0].astype(int)]])\n",
        "    np.savetxt(SaveName, Result)\n",
        "    return Result\n",
        "\n",
        "def Import_Dataset(FileName):\n",
        "    \"\"\"This function loads a catalogue of structures with their corresponding Rwp values and split the dataset \n",
        "    into a training set and validation set with features and labels.\"\"\"\n",
        "    # load data\n",
        "    dataset = np.loadtxt(FileName, delimiter=\" \", skiprows=0)\n",
        "    dataset_original = dataset.copy()\n",
        "\n",
        "    # Split into training and validation set\n",
        "    dataset_train = dataset[:int(len(dataset)*0.8)]\n",
        "    dataset_val = dataset[int(len(dataset)*0.8):len(dataset)]\n",
        "    \n",
        "    # split data into features (X) and labels (y)\n",
        "    X_train = dataset_train[:,2:len(dataset)+1]\n",
        "    y_train = dataset_train[:,1]\n",
        "    X_val = dataset_val[:,2:len(dataset)+1]\n",
        "    y_val = dataset_val[:,1]\n",
        "    \n",
        "    print(\"Number of Training Data:\", len(y_train))\n",
        "    print(\"Number of Validation Data:\", len(y_val))\n",
        "        \n",
        "    return X_train, y_train, X_val, y_val\n",
        "    \n",
        "def Validate_XGBoost(model, X_val, y_val):\n",
        "    \"\"\"Function to validate the performance of the XGBoost algorithm on a validation set\"\"\"\n",
        "    print (\"Giving an estimate of the accuracy of the model\")\n",
        "    xgb_val = xgb.DMatrix(X_val, y_val)\n",
        "    y_pred_val = model.predict(xgb_val)\n",
        "    rmse = mean_squared_error(y_val, y_pred_val)\n",
        "    print(\"RMSE: %f\" % (rmse))\n",
        "    return rmse\n",
        "\n",
        "def DecisionTree_CrossValidation(learning_rate, max_depth, data, targets):\n",
        "    \"\"\"Decision Tree cross validation.\n",
        "       Fits a Decision Tree with the given paramaters to the target \n",
        "       given data, calculated a CV accuracy score and returns the mean.\n",
        "       The goal is to find combinations of max_depth, min_samples_leaf \n",
        "       that maximize the accuracy\n",
        "    \"\"\"\n",
        "    \n",
        "    estimator = xgb.XGBRegressor(random_state=0, \n",
        "                                       learning_rate = learning_rate,\n",
        "                                       max_depth=max_depth,\n",
        "                                       objective='reg:squarederror') \n",
        "    \n",
        "    cval = cross_val_score(estimator, data, targets, cv=3)\n",
        "    return cval.mean()\n",
        "\n",
        "def optimize_DecisionTree(data, targets, pars, n_iter=5):\n",
        "    \"\"\"Apply Bayesian Optimization to Decision Tree parameters.\"\"\"\n",
        "    \n",
        "    def crossval_wrapper(learning_rate, max_depth):\n",
        "        \"\"\"Wrapper of Decision Tree cross validation. \n",
        "           Notice how we ensure max_depth, min_samples_leaf \n",
        "           are casted to integer before we pass them along.\n",
        "        \"\"\"\n",
        "        accuracy_mean = DecisionTree_CrossValidation(learning_rate = learning_rate,\n",
        "                                       max_depth=int(max_depth), \n",
        "                                       data=data, targets=targets)\n",
        "        \n",
        "        return accuracy_mean\n",
        "    \n",
        "    optimizer = BayesianOptimization(f=crossval_wrapper, pbounds=pars, \n",
        "                                     random_state=0, verbose=2)\n",
        "    optimizer.maximize(init_points=4, n_iter=n_iter)\n",
        "\n",
        "    return optimizer\n",
        "\n",
        "def train_w_earlyStop(X_train, y_train, learning_rate, max_depth, n_estimators, n_jobs, gamma, min_child_weight, base_score, seed, early_stop, xgb_model=None):\n",
        "    \"\"\"Train a XGBoost model using the given parameters. The training will run until the early stop criteria is\n",
        "    fulfilled or 5000 epochs are run. The loss curve and values is saved.\"\"\"\n",
        "    start_time = time.time()\n",
        "\n",
        "    xgb_params = {}\n",
        "    xgb_params['learning_rate'] = learning_rate\n",
        "    xgb_params['objective'] = 'reg:squarederror' # Default\n",
        "    xgb_params['max_depth'] = max_depth\n",
        "    xgb_params['n_estimators'] = n_estimators\n",
        "    xgb_params['n_jobs'] = n_jobs\n",
        "    xgb_params['gamma'] = gamma\n",
        "    xgb_params['min_child_weight'] = min_child_weight\n",
        "    xgb_params['eval_metric'] = ['mae']\n",
        "    xgb_params['base_score'] = base_score\n",
        "    xgb_params['seed'] = seed\n",
        "    xgb_params['verbosity'] = 0\n",
        "    epochs = 5000\n",
        "\n",
        "    store = {}\n",
        "    xgb_train = xgb.DMatrix(X_train, y_train)\n",
        "    xgb_val = xgb.DMatrix(X_val, y_val)\n",
        "    evallist = [(xgb_train,'train'),(xgb_val, 'val')]\n",
        "    model = None\n",
        "\n",
        "    model = xgb.train(xgb_params, xgb_train, epochs, evallist, evals_result=store, verbose_eval=0, early_stopping_rounds=early_stop, xgb_model=model)\n",
        "    print (\"Training using the best parameters\")\n",
        "    print(\"Total execution time: %.3f s\" % (time.time()-start_time))\n",
        "    print (\"Training succeeded\")\n",
        "    \n",
        "    # Save Loss\n",
        "    loss_results = pd.DataFrame(store)\n",
        "    loss_results.to_csv(\"LossCurve.csv\")\n",
        "\n",
        "    # Plot Loss\n",
        "    test_score = store['val']['mae']\n",
        "    train_score = store['train']['mae']\n",
        "    plt.plot(range(len(test_score)), test_score, \"c\", label=\"Val\")\n",
        "    plt.plot(range(len(train_score)), train_score, \"orange\", label=\"Train\")\n",
        "    plt.xlabel(\"Epochs\")\n",
        "    plt.ylabel(\"MAE Loss\")\n",
        "    plt.legend()\n",
        "    plt.savefig(\"LossCurve.png\")\n",
        "    return model, store\n",
        "\n",
        "def shap_essential_figure(model, X_train, saveResults):\n",
        "    \"\"\"Function that takes a XGBoost model, a training set and calculates SHAP values of each features in the \n",
        "    training set. Afterwards, it saves a SHAP summary plot\"\"\"\n",
        "    # Calculate SHAP values\n",
        "    explainer = shap.TreeExplainer(model)\n",
        "    shap_values = explainer.shap_values(X_train) \n",
        "    # Make SHAP summary plot\n",
        "    shap.summary_plot(shap_values[:,1:], X_train[:,1:], feature_names=[\"Atom #\"+str(i) for i in range(1,X_train.shape[1])], color_bar_label=\"Feature Value (Low: Atom Removed, High: Atom Not Removed)\", show=False, max_display=X_train.shape[1]) # to plot these explanations\n",
        "    plt.savefig(saveResults + \"SHAP_values.png\", dpi=600, format = \"png\", bbox_inches='tight')\n",
        "    return explainer, shap_values\n",
        "\n",
        "def calculate_atomContributionValue(shap_values, X_train, saveResults):\n",
        "    \"\"\"Calculate atom contribution value list from the result array\"\"\"\n",
        "    \n",
        "    # Define AtomContributionValues vector\n",
        "    AtomContributionValues = []\n",
        "    AtomContributionValues_RMS = []\n",
        "    for i in range(X_train.shape[1]):\n",
        "        # We are not interested in the number of atoms in this regi\n",
        "        if i == 0:\n",
        "            continue\n",
        "        else:\n",
        "            Keep_atoms = np.mean((shap_values[np.where(X_train[:,i] == 1),i]))\n",
        "            Keep_atoms_RMS = np.std((shap_values[np.where(X_train[:,i] == 1),i]))\n",
        "            Remove_atoms = np.mean((shap_values[np.where(X_train[:,i] == 0),i]))\n",
        "            Remove_atoms_RMS = np.std((shap_values[np.where(X_train[:,i] == 0),i]))\n",
        "            AtomContributionValues.append(0.5*Keep_atoms - 0.5*Remove_atoms)\n",
        "            AtomContributionValues_RMS.append(np.sqrt(0.5*Keep_atoms_RMS**2 + 0.5*Remove_atoms_RMS**2))\n",
        "\n",
        "    for i in range(len(AtomContributionValues_RMS)):\n",
        "      print (\"Atom\", i+1,\" AtomContributionValue: \", AtomContributionValues[i], \" +/- \", AtomContributionValues_RMS[i], \"Atom\", i+1,\" confidence factor: \", abs(AtomContributionValues[i]/AtomContributionValues_RMS[i]))\n",
        "    print (\"Overall confidence factor: \", np.nanmean(np.abs(np.array(AtomContributionValues)/np.array(AtomContributionValues_RMS))), \" +/- \", np.nanstd(np.abs(np.array(AtomContributionValues)/np.array(AtomContributionValues_RMS))))\n",
        "\n",
        "    # Normalise the AtomContributionValues\n",
        "    amin, amax = min(AtomContributionValues), max(AtomContributionValues)\n",
        "    AtomContributionValues = (AtomContributionValues - amin) / (amax - amin)\n",
        "    AtomContributionValues_ph = AtomContributionValues.copy()\n",
        "    AtomContributionValues_ph.sort()\n",
        "\n",
        "    # Define colormap of viridis.reverse\n",
        "    norm = mpl.colors.Normalize(vmin=AtomContributionValues_ph[round((len(AtomContributionValues))/10)], vmax=AtomContributionValues_ph[-round((len(AtomContributionValues))/10)])\n",
        "    cmap = matplotlib.cm.cividis_r\n",
        "    m = mpl.cm.ScalarMappable(norm=norm, cmap=cmap)\n",
        "    \n",
        "    # Save results to file\n",
        "    f = open(saveResults+\"AtomContributionValues.txt\", \"w\")\n",
        "    f.write(\"\\nAtom contribution are calculated to: \\n\")\n",
        "    for i in range(len(AtomContributionValues)):\n",
        "        f.write(\"Atom # \"+ str(i+1) + \":  \"+ str(AtomContributionValues[i]) + \"  Colorcode:  \"+ mpl.colors.rgb2hex(m.to_rgba(AtomContributionValues[i]))+\"\\n\")\n",
        "    \n",
        "    return m, AtomContributionValues\n",
        "\n",
        "def Make_CrystalMakerFile(elements, xyz, AtomContributionValues, m, saveResults, threshold):\n",
        "    # Read bonds and colors of all atoms\n",
        "    bonding = []\n",
        "    with open(\"ML-MotEx/util/Bonding.txt\", 'r') as fi:\n",
        "        for line in fi.readlines():\n",
        "            sep_line=line.strip('{}\\n\\r ').split()\n",
        "            bonding.append(sep_line)\n",
        "    bonding = np.array(bonding)\n",
        "    \n",
        "    # Output a crystalmaker file to visualize the results\n",
        "    CrystalMaker = open(saveResults+'_CrystalMaker.cmtx', 'w')\n",
        "\n",
        "    CrystalMaker.write(\"MOLE  CrystalMaker molecule format\\n\")\n",
        "    CrystalMaker.write(\"TITL  Molecule\\n\\n\")\n",
        "    CrystalMaker.write(\"! Model type\\n\")\n",
        "    CrystalMaker.write(\"MODL  1\\n\\n\")\n",
        "\n",
        "    CrystalMaker.write(\"! Depth fading settings\\n\")\n",
        "    CrystalMaker.write(\"DCUE  1.000000 0.212899 0.704686\\n\\n\")\n",
        "\n",
        "    CrystalMaker.write(\"! Colour definitions:\\n\")\n",
        "    CrystalMaker.write(\"TYPE\\n\")\n",
        "\n",
        "    # Assign colors to all the atoms\n",
        "    for iter, element in enumerate(elements):\n",
        "        if iter < NumW:\n",
        "            #CrystalMaker.write(element + str(iter+1) + \" 1.32 \")\n",
        "            CrystalMaker.write(element + str(iter+1) + \" \" + bonding[np.where(bonding == element)[0][0], 1] + \" \")\n",
        "            rgb1 = m.to_rgba(AtomContributionValues[iter])[:-1][0]\n",
        "            rgb2 = m.to_rgba(AtomContributionValues[iter])[:-1][1]\n",
        "            rgb3 = m.to_rgba(AtomContributionValues[iter])[:-1][2]\n",
        "            CrystalMaker.write(str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3))\n",
        "            CrystalMaker.write(\"\\n\")\n",
        "        else:\n",
        "            #CrystalMaker.write(element + str(iter+1) + \" 0.66 \")\n",
        "            CrystalMaker.write(element + str(iter+1) + \" \" + bonding[np.where(bonding == element)[0][0], 1] + \" \")\n",
        "            rgb1 = int(float(bonding[np.where(bonding == element)[0][0], 2])*255) #mpl.colors.to_rgb(\"#FF0000\")[0]\n",
        "            rgb2 = int(float(bonding[np.where(bonding == element)[0][0], 3])*255) #mpl.colors.to_rgb(\"#FF0000\")[1]\n",
        "            rgb3 = int(float(bonding[np.where(bonding == element)[0][0], 4])*255) #mpl.colors.to_rgb(\"#FF0000\")[2]\n",
        "            CrystalMaker.write(str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3))\n",
        "            CrystalMaker.write(\"\\n\")\n",
        "    \n",
        "    CrystalMaker.write(\"\\n\")\n",
        "    CrystalMaker.write(\"! Atoms list\\n\")\n",
        "    CrystalMaker.write(\"! Bond Specifications\\n\")\n",
        "    \n",
        "    # Assign bonds between the atoms\n",
        "    for iter, element in enumerate(elements):\n",
        "        if iter < NumW:\n",
        "            NI_elements = np.delete(np.unique(elements), np.where(np.unique(elements) == element)[0])\n",
        "            for NI_element in NI_elements:\n",
        "                CrystalMaker.write(\"BMAX \" + element + \" \" + str(NI_element) + \"  \" + str(threshold))\n",
        "                CrystalMaker.write(\"\\n\")\n",
        "    \n",
        "    CrystalMaker.write(\"\\n\")\n",
        "    CrystalMaker.write(\"! Atoms list\\n\")\n",
        "    CrystalMaker.write(\"ATOM\\n\")\n",
        "    \n",
        "    # Assign coordinates to the atoms\n",
        "    for iter, element in enumerate(elements):\n",
        "        if iter < NumW:\n",
        "            CrystalMaker.write(element + \" \" + element + str(iter+1) + \" \" + str(xyz[iter][0]) + \" \" + str(xyz[iter][1]) + \" \" + str(xyz[iter][2]) + \"\\n\")\n",
        "        else:\n",
        "            CrystalMaker.write(element + \" \" + element + str(iter+1) + \" \" + str(xyz[iter][0]) + \" \" + str(xyz[iter][1]) + \" \" + str(xyz[iter][2]) + \"\\n\")\n",
        "\n",
        "    CrystalMaker.close()\n",
        "    \n",
        "    return None\n",
        "\n",
        "def Make_VestaFile(elements, xyz, AtomContributionValues, m, saveResults, threshold):\n",
        "    # Read bonds and colors of all atoms\n",
        "    bonding = []\n",
        "    with open(\"ML-MotEx/util/Bonding.txt\", 'r') as fi:\n",
        "        for line in fi.readlines():\n",
        "            sep_line=line.strip('{}\\n\\r ').split()\n",
        "            bonding.append(sep_line)\n",
        "    bonding = np.array(bonding)\n",
        "\n",
        "    # Output a Vesta file to visualize the results\n",
        "    Vesta = open(saveResults+'_Vesta.vesta', 'w')\n",
        "\n",
        "    Vesta.write(\"#VESTA_FORMAT_VERSION 3.5.4\\n\\n\\n\")\n",
        "    Vesta.write(\"MOLECULE\\n\\n\")\n",
        "    Vesta.write(\"Title\\n\")\n",
        "    Vesta.write(\"XYZ file\\n\\n\")\n",
        "\n",
        "    Vesta.write(\"STRUC\\n\")\n",
        "    # Assign coordinates to the atoms\n",
        "    for iter, element in enumerate(elements):\n",
        "        Vesta.write(str(iter+1) + \" \" + element + \" \" + element + str(iter+1) + \" 1.0000 \" + str(xyz[iter][0]) + \" \" + str(xyz[iter][1]) + \" \" + str(xyz[iter][2]) + \"1\" + \" -\" + \"\\n\")\n",
        "        Vesta.write(\"0 0 0 0\\n\")\n",
        "    Vesta.write(\"  0 0 0 0 0 0 0\\n\")\n",
        "\n",
        "    Vesta.write(\"SBOND\\n\")\n",
        "    # Assign bonds between the atoms\n",
        "    unique_elements = np.unique(elements)\n",
        "    for iter, element1 in enumerate(unique_elements):\n",
        "      for iter, element2 in enumerate(unique_elements):\n",
        "        if not element1 == element2:\n",
        "          Vesta.write(str(iter+1) + \" \" + element1 + \" \" + element2 + \" 0.0 \" + str(threshold) + \" 0 1 1 0 1 0.25 2 127 127 127\\n\")\n",
        "          Vesta.write(\"0 0 0 0\\n\")\n",
        "    \n",
        "    Vesta.write(\"SITET\\n\")\n",
        "    # Assign colors to all the atoms\n",
        "    for iter, element in enumerate(elements):\n",
        "        if iter < NumW:\n",
        "            rgb1 = int(m.to_rgba(AtomContributionValues[iter])[:-1][0]*255)\n",
        "            rgb2 = int(m.to_rgba(AtomContributionValues[iter])[:-1][1]*255)\n",
        "            rgb3 = int(m.to_rgba(AtomContributionValues[iter])[:-1][2]*255)\n",
        "            Vesta.write(str(iter+1) + \" \" + element + str(iter+1) + \" \" + bonding[np.where(bonding == element)[0][0], 1] + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" 204 0\\n\")\n",
        "        else:\n",
        "            rgb1 = int(float(bonding[np.where(bonding == element)[0][0], 2])*255)\n",
        "            rgb2 = int(float(bonding[np.where(bonding == element)[0][0], 3])*255)\n",
        "            rgb3 = int(float(bonding[np.where(bonding == element)[0][0], 4])*255)\n",
        "            Vesta.write(str(iter+1) + \" \" + element + str(iter+1) + \" \" + bonding[np.where(bonding == element)[0][0], 1] + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" 204 0\\n\")\n",
        "    Vesta.write(\"0 0 0 0 0 0\\n\")\n",
        "    \n",
        "    Vesta.write(\"ATOMT\\n\")\n",
        "    done_deal_atoms = []\n",
        "    for iter, element in enumerate(elements):\n",
        "      if element not in done_deal_atoms:\n",
        "        rgb1 = int(float(bonding[np.where(bonding == element)[0][0], 2])*255)\n",
        "        rgb2 = int(float(bonding[np.where(bonding == element)[0][0], 3])*255)\n",
        "        rgb3 = int(float(bonding[np.where(bonding == element)[0][0], 4])*255)\n",
        "        Vesta.write(str(iter+1) + \" \" + element + \" \" + bonding[np.where(bonding == element)[0][0], 1] + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" \" + str(rgb1) + \" \" + str(rgb2) + \" \" + str(rgb3) + \" 204\\n\")\n",
        "        done_deal_atoms.append(element)\n",
        "    Vesta.write(\"0 0 0 0 0 0\\n\")\n",
        "\n",
        "    Vesta.close()\n",
        "    \n",
        "    return None\n"
      ],
      "metadata": {
        "id": "CIM9y9ECtRdz"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 1: Produce a catalogue of structure motifs\n",
        "### First define the starting model, how large the structure catalogue has to be, number of iterable atoms and threshold between iterable atoms and non-iterable atoms."
      ],
      "metadata": {
        "id": "dHuN2OsMtypj"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print (\"Upload a XYZ file of your starting model\")\n",
        "starting_model = list(files.upload())[0] # Name of the starting model file\n",
        "Number_of_structures = 1000 # Number of structures made to the structure catalogue\n",
        "allowed_atoms = [\"W\"] # The atoms that should be permuted, can be multiple atoms\n",
        "threshold = 2.6 # Threshold for W - O bond"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/files.js": {
              "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
              "ok": true,
              "headers": [
                [
                  "content-type",
                  "application/javascript"
                ]
              ],
              "status": 200,
              "status_text": ""
            }
          },
          "height": 90
        },
        "id": "5RyeCXx4ty0w",
        "outputId": "6d4895bc-7435-4674-92cb-da37ee82b413"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Upload a XYZ file of your starting model\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-0ebfbd49-9d4a-4fb6-9b46-d40ca14aa565\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-0ebfbd49-9d4a-4fb6-9b46-d40ca14aa565\">\n",
              "      Upload widget is only available when the cell has been executed in the\n",
              "      current browser session. Please rerun this cell to enable.\n",
              "      </output>\n",
              "      <script src=\"/nbextensions/google.colab/files.js\"></script> "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saving 109725.xyz to 109725.xyz\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Produce a catalogue of structure motifs"
      ],
      "metadata": {
        "id": "aWo9QoNYt3aM"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "NumW = format_XYZ(starting_model, allowed_atoms) # Format the starting model and calculate then number of atoms that should be permuted in the starting model\n",
        "structure_catalogue = structure_catalogue_maker(Number_of_structures, Number_of_atoms=NumW, lower_atom_number=0, higher_atom_number=NumW)\n",
        "print (\"We show the first 10 structures in the catalogue:\")\n",
        "structure_catalogue[:10]\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "tCmqJJXit3iA",
        "outputId": "e7336e8a-8925-41c5-ace9-128f3574c336"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Starting to make a structure catalogue with:  1000 structure from the starting model.\n",
            "The structure will have between 0 and 24 atoms\n",
            "Permutations Succeeded\n",
            "We show the first 10 structures in the catalogue:\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[[3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],\n",
              " [20, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],\n",
              " [18, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1],\n",
              " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
              " [14, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],\n",
              " [8, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0],\n",
              " [6, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],\n",
              " [15, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1],\n",
              " [14, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0],\n",
              " [3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]]"
            ]
          },
          "metadata": {},
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 2: Fit all of the structures from the catalogue of structure motifs to the dataset\n",
        "### First define the experimental data path and the path you want the structure catalogue with fits to be saved"
      ],
      "metadata": {
        "id": "BeOR90xmuJBK"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print (\"Upload a PDF file in gr format\")\n",
        "StemName = list(files.upload())[0][:-3] # Upload PDF from local computer\n",
        "Experimental_Data = StemName + \".gr\" # Name of the experimental file\n",
        "saveFits = StemName + \".txt\" # Name of the saved fits file\n",
        "atom_ph, Qmin, Qmax, Qdamp, rmin, rmax = \"W\", 0.7, 20, 0.05, 1.6, 10\n"
      ],
      "metadata": {
        "colab": {
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/files.js": {
              "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
              "ok": true,
              "headers": [
                [
                  "content-type",
                  "application/javascript"
                ]
              ],
              "status": 200,
              "status_text": ""
            }
          },
          "base_uri": "https://localhost:8080/",
          "height": 90
        },
        "id": "cmeF4HTvuJIc",
        "outputId": "ef4e0dd4-f7a8-43a0-b9ef-ce203ac85584"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Upload a PDF file in gr format\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-4a420885-8459-48d7-8bdc-6a7eb2667eb6\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-4a420885-8459-48d7-8bdc-6a7eb2667eb6\">\n",
              "      Upload widget is only available when the cell has been executed in the\n",
              "      current browser session. Please rerun this cell to enable.\n",
              "      </output>\n",
              "      <script src=\"/nbextensions/google.colab/files.js\"></script> "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saving DanMAX_AlphaKeggin_nyquist.gr to DanMAX_AlphaKeggin_nyquist.gr\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Produce organized structure catalogue with Rwp values"
      ],
      "metadata": {
        "id": "Q2EnAVYRuOdC"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "Result = fitting_multiprocess(structure_catalogue, atom_ph, Qmin, Qmax, Qdamp, rmin, rmax, SaveName=saveFits, cores=None)\n",
        "print (\"The best fitting structure is:\")\n",
        "Result[np.argmin(Result[:,1])]\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "L5x9IHiDuOlu",
        "outputId": "594894af-1f2b-4b22-a5d2-c151a56e5bc1"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "I have now fitted:  0 structures out of 1000\n",
            "I have now fitted:  100 structures out of 1000\n",
            "I have now fitted:  200 structures out of 1000\n",
            "I have now fitted:  300 structures out of 1000\n",
            "I have now fitted:  400 structures out of 1000\n",
            "I have now fitted:  500 structures out of 1000\n",
            "I have now fitted:  600 structures out of 1000\n",
            "I have now fitted:  700 structures out of 1000\n",
            "I have now fitted:  800 structures out of 1000\n",
            "I have now fitted:  900 structures out of 1000\n",
            "Best fit\n",
            "[430.           0.51328241]\n",
            "Total execution time: 389.512s\n",
            "The best fitting structure is:\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([430.        ,   0.51328241,  11.        ,   1.        ,\n",
              "         0.        ,   0.        ,   0.        ,   1.        ,\n",
              "         1.        ,   0.        ,   0.        ,   1.        ,\n",
              "         0.        ,   1.        ,   0.        ,   1.        ,\n",
              "         0.        ,   1.        ,   0.        ,   0.        ,\n",
              "         0.        ,   1.        ,   0.        ,   1.        ,\n",
              "         0.        ,   1.        ,   1.        ])"
            ]
          },
          "metadata": {},
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 3: Train a XGBoost Regressor to predict the Rwp value based on the structure catalogue\n",
        "### Set range for model optimization. \n",
        "\n",
        "It can take a few minutes to train the XGBoost model. \n",
        "N_iter gives a measure of how rounds the model should try to optimize. Set to a low number for a less accurate but fast convergence. "
      ],
      "metadata": {
        "id": "dXVWN7v00UIf"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "Min_LR = 0.1 # Minimum learning rate for the XGBoost algorithm\n",
        "Max_LR = 0.8 # Maximum learning rate for the XGBoost algorithm\n",
        "Min_Dep = 2 # Minimum max depth for the XGBoost algorithm\n",
        "Max_Dep = 10 # Maximum max depth for the XGBoost algorithm\n",
        "n_iter = 50 # Number of iterations for the bayesian optimization model\n",
        "\n",
        "# Import dataset\n",
        "X_train, y_train, X_val, y_val = Import_Dataset(saveFits)\n",
        "\n",
        "# Make a dictionary of parameters we should optimize for the ML algorithm\n",
        "parameters_BayesianOptimization = {\"learning_rate\": (Min_LR, Max_LR), #0.1 is default - Boosting learning rate\n",
        "                                   \"max_depth\": (Min_Dep, Max_Dep)}  #3 is default - Maximum tree depth for base learners.\n",
        "\n",
        "# Finding the best parameters for the ML model\n",
        "BayesianOptimization_func = optimize_DecisionTree(X_train, y_train, parameters_BayesianOptimization, n_iter=n_iter)\n",
        "print(\"Best parameters were: \", BayesianOptimization_func.max)\n",
        "\n",
        "\n",
        "# Get best parameters for the ML model and make max depth to an integer\n",
        "params = BayesianOptimization_func.max['params']\n",
        "params['max_depth'] = int(params['max_depth'])\n",
        "\n",
        "#  Define model, train and validate the model and save model\n",
        "model, store = train_w_earlyStop(X_train, y_train, n_jobs=1, seed=0, base_score=0.5, n_estimators=100, gamma=0, min_child_weight=1, early_stop=50, **params)\n",
        "Validate_XGBoost(model, X_val, y_val)\n",
        "model.save_model(StemName + \"_XGB_model.dat\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "k6za1V2Q0UQ0",
        "outputId": "a9cae0e7-e8de-48ee-bf8d-9b0cca211300"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Number of Training Data: 800\n",
            "Number of Validation Data: 200\n",
            "|   iter    |  target   | learni... | max_depth |\n",
            "-------------------------------------------------\n",
            "| \u001b[0m 1       \u001b[0m | \u001b[0m 0.9041  \u001b[0m | \u001b[0m 0.4842  \u001b[0m | \u001b[0m 7.722   \u001b[0m |\n",
            "| \u001b[95m 2       \u001b[0m | \u001b[95m 0.9119  \u001b[0m | \u001b[95m 0.5219  \u001b[0m | \u001b[95m 6.359   \u001b[0m |\n",
            "| \u001b[0m 3       \u001b[0m | \u001b[0m 0.9099  \u001b[0m | \u001b[0m 0.3966  \u001b[0m | \u001b[0m 7.167   \u001b[0m |\n",
            "| \u001b[0m 4       \u001b[0m | \u001b[0m 0.9028  \u001b[0m | \u001b[0m 0.4063  \u001b[0m | \u001b[0m 9.134   \u001b[0m |\n",
            "| \u001b[95m 5       \u001b[0m | \u001b[95m 0.948   \u001b[0m | \u001b[95m 0.1064  \u001b[0m | \u001b[95m 4.058   \u001b[0m |\n",
            "| \u001b[0m 6       \u001b[0m | \u001b[0m 0.9322  \u001b[0m | \u001b[0m 0.1     \u001b[0m | \u001b[0m 2.632   \u001b[0m |\n",
            "| \u001b[95m 7       \u001b[0m | \u001b[95m 0.9497  \u001b[0m | \u001b[95m 0.8     \u001b[0m | \u001b[95m 3.795   \u001b[0m |\n",
            "| \u001b[0m 8       \u001b[0m | \u001b[0m 0.8981  \u001b[0m | \u001b[0m 0.8     \u001b[0m | \u001b[0m 4.506   \u001b[0m |\n",
            "| \u001b[0m 9       \u001b[0m | \u001b[0m 0.9013  \u001b[0m | \u001b[0m 0.481   \u001b[0m | \u001b[0m 8.583   \u001b[0m |\n",
            "| \u001b[0m 10      \u001b[0m | \u001b[0m 0.9002  \u001b[0m | \u001b[0m 0.5682  \u001b[0m | \u001b[0m 6.245   \u001b[0m |\n",
            "| \u001b[95m 11      \u001b[0m | \u001b[95m 0.9597  \u001b[0m | \u001b[95m 0.4633  \u001b[0m | \u001b[95m 3.873   \u001b[0m |\n",
            "| \u001b[0m 12      \u001b[0m | \u001b[0m 0.9093  \u001b[0m | \u001b[0m 0.1571  \u001b[0m | \u001b[0m 8.515   \u001b[0m |\n",
            "| \u001b[0m 13      \u001b[0m | \u001b[0m 0.9591  \u001b[0m | \u001b[0m 0.4634  \u001b[0m | \u001b[0m 3.889   \u001b[0m |\n",
            "| \u001b[0m 14      \u001b[0m | \u001b[0m 0.9467  \u001b[0m | \u001b[0m 0.1035  \u001b[0m | \u001b[0m 3.427   \u001b[0m |\n",
            "| \u001b[0m 15      \u001b[0m | \u001b[0m 0.9475  \u001b[0m | \u001b[0m 0.7924  \u001b[0m | \u001b[0m 3.088   \u001b[0m |\n",
            "| \u001b[95m 16      \u001b[0m | \u001b[95m 0.9633  \u001b[0m | \u001b[95m 0.7882  \u001b[0m | \u001b[95m 2.063   \u001b[0m |\n",
            "| \u001b[95m 17      \u001b[0m | \u001b[95m 0.9648  \u001b[0m | \u001b[95m 0.3415  \u001b[0m | \u001b[95m 2.006   \u001b[0m |\n",
            "| \u001b[0m 18      \u001b[0m | \u001b[0m 0.9629  \u001b[0m | \u001b[0m 0.8     \u001b[0m | \u001b[0m 2.45    \u001b[0m |\n",
            "| \u001b[0m 19      \u001b[0m | \u001b[0m 0.858   \u001b[0m | \u001b[0m 0.7803  \u001b[0m | \u001b[0m 9.994   \u001b[0m |\n",
            "| \u001b[95m 20      \u001b[0m | \u001b[95m 0.9665  \u001b[0m | \u001b[95m 0.5449  \u001b[0m | \u001b[95m 2.237   \u001b[0m |\n",
            "| \u001b[0m 21      \u001b[0m | \u001b[0m 0.9652  \u001b[0m | \u001b[0m 0.5359  \u001b[0m | \u001b[0m 2.006   \u001b[0m |\n",
            "| \u001b[0m 22      \u001b[0m | \u001b[0m 0.9388  \u001b[0m | \u001b[0m 0.1181  \u001b[0m | \u001b[0m 2.026   \u001b[0m |\n",
            "| \u001b[0m 23      \u001b[0m | \u001b[0m 0.937   \u001b[0m | \u001b[0m 0.1     \u001b[0m | \u001b[0m 5.13    \u001b[0m |\n",
            "| \u001b[0m 24      \u001b[0m | \u001b[0m 0.958   \u001b[0m | \u001b[0m 0.5303  \u001b[0m | \u001b[0m 3.439   \u001b[0m |\n",
            "| \u001b[95m 25      \u001b[0m | \u001b[95m 0.9674  \u001b[0m | \u001b[95m 0.5522  \u001b[0m | \u001b[95m 2.666   \u001b[0m |\n",
            "| \u001b[0m 26      \u001b[0m | \u001b[0m 0.9635  \u001b[0m | \u001b[0m 0.4219  \u001b[0m | \u001b[0m 2.986   \u001b[0m |\n",
            "| \u001b[0m 27      \u001b[0m | \u001b[0m 0.9249  \u001b[0m | \u001b[0m 0.1     \u001b[0m | \u001b[0m 6.568   \u001b[0m |\n",
            "| \u001b[0m 28      \u001b[0m | \u001b[0m 0.9452  \u001b[0m | \u001b[0m 0.1007  \u001b[0m | \u001b[0m 4.613   \u001b[0m |\n",
            "| \u001b[0m 29      \u001b[0m | \u001b[0m 0.9666  \u001b[0m | \u001b[0m 0.5354  \u001b[0m | \u001b[0m 2.467   \u001b[0m |\n",
            "| \u001b[0m 30      \u001b[0m | \u001b[0m 0.9626  \u001b[0m | \u001b[0m 0.7007  \u001b[0m | \u001b[0m 2.717   \u001b[0m |\n",
            "| \u001b[0m 31      \u001b[0m | \u001b[0m 0.9649  \u001b[0m | \u001b[0m 0.6781  \u001b[0m | \u001b[0m 2.308   \u001b[0m |\n",
            "| \u001b[0m 32      \u001b[0m | \u001b[0m 0.9654  \u001b[0m | \u001b[0m 0.5024  \u001b[0m | \u001b[0m 2.818   \u001b[0m |\n",
            "| \u001b[0m 33      \u001b[0m | \u001b[0m 0.9625  \u001b[0m | \u001b[0m 0.4118  \u001b[0m | \u001b[0m 2.143   \u001b[0m |\n",
            "| \u001b[0m 34      \u001b[0m | \u001b[0m 0.965   \u001b[0m | \u001b[0m 0.6377  \u001b[0m | \u001b[0m 2.544   \u001b[0m |\n",
            "| \u001b[0m 35      \u001b[0m | \u001b[0m 0.9635  \u001b[0m | \u001b[0m 0.4449  \u001b[0m | \u001b[0m 2.631   \u001b[0m |\n",
            "| \u001b[0m 36      \u001b[0m | \u001b[0m 0.9588  \u001b[0m | \u001b[0m 0.2971  \u001b[0m | \u001b[0m 3.697   \u001b[0m |\n",
            "| \u001b[0m 37      \u001b[0m | \u001b[0m 0.9618  \u001b[0m | \u001b[0m 0.4027  \u001b[0m | \u001b[0m 3.197   \u001b[0m |\n",
            "| \u001b[0m 38      \u001b[0m | \u001b[0m 0.966   \u001b[0m | \u001b[0m 0.5356  \u001b[0m | \u001b[0m 2.347   \u001b[0m |\n",
            "| \u001b[0m 39      \u001b[0m | \u001b[0m 0.9643  \u001b[0m | \u001b[0m 0.7998  \u001b[0m | \u001b[0m 2.248   \u001b[0m |\n",
            "| \u001b[0m 40      \u001b[0m | \u001b[0m 0.9563  \u001b[0m | \u001b[0m 0.5315  \u001b[0m | \u001b[0m 3.022   \u001b[0m |\n",
            "| \u001b[0m 41      \u001b[0m | \u001b[0m 0.958   \u001b[0m | \u001b[0m 0.1773  \u001b[0m | \u001b[0m 3.057   \u001b[0m |\n",
            "| \u001b[0m 42      \u001b[0m | \u001b[0m 0.8674  \u001b[0m | \u001b[0m 0.8     \u001b[0m | \u001b[0m 6.844   \u001b[0m |\n",
            "| \u001b[0m 43      \u001b[0m | \u001b[0m 0.937   \u001b[0m | \u001b[0m 0.1     \u001b[0m | \u001b[0m 5.718   \u001b[0m |\n",
            "| \u001b[0m 44      \u001b[0m | \u001b[0m 0.9639  \u001b[0m | \u001b[0m 0.6336  \u001b[0m | \u001b[0m 2.14    \u001b[0m |\n",
            "| \u001b[0m 45      \u001b[0m | \u001b[0m 0.9104  \u001b[0m | \u001b[0m 0.1702  \u001b[0m | \u001b[0m 8.974   \u001b[0m |\n",
            "| \u001b[0m 46      \u001b[0m | \u001b[0m 0.963   \u001b[0m | \u001b[0m 0.4325  \u001b[0m | \u001b[0m 2.0     \u001b[0m |\n",
            "| \u001b[0m 47      \u001b[0m | \u001b[0m 0.9623  \u001b[0m | \u001b[0m 0.7002  \u001b[0m | \u001b[0m 2.715   \u001b[0m |\n",
            "| \u001b[0m 48      \u001b[0m | \u001b[0m 0.9639  \u001b[0m | \u001b[0m 0.4331  \u001b[0m | \u001b[0m 2.264   \u001b[0m |\n",
            "| \u001b[0m 49      \u001b[0m | \u001b[0m 0.961   \u001b[0m | \u001b[0m 0.4623  \u001b[0m | \u001b[0m 3.887   \u001b[0m |\n",
            "| \u001b[0m 50      \u001b[0m | \u001b[0m 0.962   \u001b[0m | \u001b[0m 0.3859  \u001b[0m | \u001b[0m 3.876   \u001b[0m |\n",
            "| \u001b[0m 51      \u001b[0m | \u001b[0m 0.9625  \u001b[0m | \u001b[0m 0.6356  \u001b[0m | \u001b[0m 2.427   \u001b[0m |\n",
            "| \u001b[0m 52      \u001b[0m | \u001b[0m 0.9653  \u001b[0m | \u001b[0m 0.5269  \u001b[0m | \u001b[0m 2.115   \u001b[0m |\n",
            "| \u001b[0m 53      \u001b[0m | \u001b[0m 0.9006  \u001b[0m | \u001b[0m 0.3837  \u001b[0m | \u001b[0m 9.414   \u001b[0m |\n",
            "| \u001b[0m 54      \u001b[0m | \u001b[0m 0.966   \u001b[0m | \u001b[0m 0.5357  \u001b[0m | \u001b[0m 2.564   \u001b[0m |\n",
            "=================================================\n",
            "Best parameters were:  {'target': 0.9674267486134586, 'params': {'learning_rate': 0.5521598219851781, 'max_depth': 2.6663628292796786}}\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "Use subset (sliced data) of np.ndarray is not recommended because it will generate extra copies and increase memory consumption\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training using the best parameters\n",
            "Total execution time: 1.452 s\n",
            "Training succeeded\n",
            "Giving an estimate of the accuracy of the model\n",
            "RMSE: 0.000371\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Step 4: Calculate atom contribution values\n",
        "\n"
      ],
      "metadata": {
        "id": "q6kRsee70YeD"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Calculate SHAP values and save to savePATH.\n",
        "explainer, shap_values = shap_essential_figure(model, X_train, \"./\")\n",
        "\n",
        "# Calculate atom contribution values\n",
        "m, AtomContributionValues = calculate_atomContributionValue(shap_values, X_train, \"./\")\n",
        "\n",
        "# Output a CrystalMaker and VESTA file\n",
        "elements, xyz = Load_starting_model(starting_model)\n",
        "Make_CrystalMakerFile(elements, xyz, AtomContributionValues, m, StemName, threshold)\n",
        "Make_VestaFile(elements, xyz, AtomContributionValues, m, StemName, threshold)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "WY9eQsMn0YmY",
        "outputId": "3884f64f-7d57-419c-fd4c-c157b1135073"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Atom 1  AtomContributionValue:  -0.017897192388772964  +/-  0.004461727301915951 Atom 1  confidence factor:  4.011269891166941\n",
            "Atom 2  AtomContributionValue:  0.00958649255335331  +/-  0.0026651224645036714 Atom 2  confidence factor:  3.5970176534227716\n",
            "Atom 3  AtomContributionValue:  -0.016202433966100216  +/-  0.002464232434510734 Atom 3  confidence factor:  6.575042897411242\n",
            "Atom 4  AtomContributionValue:  0.01004964578896761  +/-  0.003155454211696662 Atom 4  confidence factor:  3.184849189608109\n",
            "Atom 5  AtomContributionValue:  -0.013983583077788353  +/-  0.002471863139495538 Atom 5  confidence factor:  5.657102472365095\n",
            "Atom 6  AtomContributionValue:  0.00590508128516376  +/-  0.0020435966613145807 Atom 6  confidence factor:  2.8895532063382845\n",
            "Atom 7  AtomContributionValue:  -0.015472999308258295  +/-  0.0025201106055524644 Atom 7  confidence factor:  6.139809607628816\n",
            "Atom 8  AtomContributionValue:  0.009626483079046011  +/-  0.002776327051399003 Atom 8  confidence factor:  3.467344769124079\n",
            "Atom 9  AtomContributionValue:  -0.019048611633479595  +/-  0.003698572308829023 Atom 9  confidence factor:  5.150260706815931\n",
            "Atom 10  AtomContributionValue:  0.010869045741856098  +/-  0.0025169343740655305 Atom 10  confidence factor:  4.318366761505842\n",
            "Atom 11  AtomContributionValue:  -0.013964663725346327  +/-  0.002092726323031282 Atom 11  confidence factor:  6.672952679793661\n",
            "Atom 12  AtomContributionValue:  0.006561524234712124  +/-  0.003051165913386598 Atom 12  confidence factor:  2.1504973577229216\n",
            "Atom 13  AtomContributionValue:  -0.018101352266967297  +/-  0.0027082435527583516 Atom 13  confidence factor:  6.683797787880279\n",
            "Atom 14  AtomContributionValue:  0.009939576964825392  +/-  0.002837099865413602 Atom 14  confidence factor:  3.503428654731675\n",
            "Atom 15  AtomContributionValue:  -0.017989476211369038  +/-  0.0028033123570827315 Atom 15  confidence factor:  6.417221458007553\n",
            "Atom 16  AtomContributionValue:  0.011124183423817158  +/-  0.0027240165023847303 Atom 16  confidence factor:  4.083743036827616\n",
            "Atom 17  AtomContributionValue:  -0.015294501092284918  +/-  0.003042858163841051 Atom 17  confidence factor:  5.026360174796453\n",
            "Atom 18  AtomContributionValue:  0.006334891775622964  +/-  0.002476422350201745 Atom 18  confidence factor:  2.5580821361537476\n",
            "Atom 19  AtomContributionValue:  -0.015922884456813335  +/-  0.003208126487814955 Atom 19  confidence factor:  4.96329696391066\n",
            "Atom 20  AtomContributionValue:  0.00923151383176446  +/-  0.0028271989529379832 Atom 20  confidence factor:  3.265250866823931\n",
            "Atom 21  AtomContributionValue:  -0.02118763979524374  +/-  0.003035567226347236 Atom 21  confidence factor:  6.979795937756018\n",
            "Atom 22  AtomContributionValue:  0.011892549693584442  +/-  0.0032494541592789855 Atom 22  confidence factor:  3.6598607368024094\n",
            "Atom 23  AtomContributionValue:  -0.01515743788331747  +/-  0.0034452791673088724 Atom 23  confidence factor:  4.399480317049905\n",
            "Atom 24  AtomContributionValue:  0.0061625896487385035  +/-  0.0021906943066331433 Atom 24  confidence factor:  2.813076032597961\n",
            "Overall confidence factor:  4.506977554010079  +/-  1.4517734376486906\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x799.2 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Download results"
      ],
      "metadata": {
        "id": "pYxRPBz-1OzS"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Download the latest results\n",
        "files.download(StemName + '_CrystalMaker.cmtx')\n",
        "files.download(StemName + '_Vesta.vesta')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 17
        },
        "id": "oJwhLWputsA0",
        "outputId": "899fd879-36a5-4785-9ee4-d6efb7364663"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ],
            "application/javascript": [
              "\n",
              "    async function download(id, filename, size) {\n",
              "      if (!google.colab.kernel.accessAllowed) {\n",
              "        return;\n",
              "      }\n",
              "      const div = document.createElement('div');\n",
              "      const label = document.createElement('label');\n",
              "      label.textContent = `Downloading \"${filename}\": `;\n",
              "      div.appendChild(label);\n",
              "      const progress = document.createElement('progress');\n",
              "      progress.max = size;\n",
              "      div.appendChild(progress);\n",
              "      document.body.appendChild(div);\n",
              "\n",
              "      const buffers = [];\n",
              "      let downloaded = 0;\n",
              "\n",
              "      const channel = await google.colab.kernel.comms.open(id);\n",
              "      // Send a message to notify the kernel that we're ready.\n",
              "      channel.send({})\n",
              "\n",
              "      for await (const message of channel.messages) {\n",
              "        // Send a message to notify the kernel that we're ready.\n",
              "        channel.send({})\n",
              "        if (message.buffers) {\n",
              "          for (const buffer of message.buffers) {\n",
              "            buffers.push(buffer);\n",
              "            downloaded += buffer.byteLength;\n",
              "            progress.value = downloaded;\n",
              "          }\n",
              "        }\n",
              "      }\n",
              "      const blob = new Blob(buffers, {type: 'application/binary'});\n",
              "      const a = document.createElement('a');\n",
              "      a.href = window.URL.createObjectURL(blob);\n",
              "      a.download = filename;\n",
              "      div.appendChild(a);\n",
              "      a.click();\n",
              "      div.remove();\n",
              "    }\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ],
            "application/javascript": [
              "download(\"download_079d3986-a66e-4f78-9637-e38756718b05\", \"DanMAX_AlphaKeggin_nyquist_CrystalMaker.cmtx\", 6301)"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Cite\n",
        "If you use ML-MotEx, please consider citing our paper. Thanks in advance!\n",
        "```\n",
        "@article{anker2022ML-MotEx,\n",
        "   title={Extracting Structural Motifs from Pair Distribution Function Data of Nanostructures using Explainable Machine Learning},\n",
        "   author={Andy S. Anker, Emil T. S. Kjær, Mikkel Juelsholt, Troels Lindahl Christiansen, Susanne Linn Skjærvø, Mads Ry Vogel Jørgensen, Innokenty Kantor, Daniel R. Sørensen, Simon J. L. Billinge, Raghavendra Selvan, Kirsten M. Ø. Jensen},\n",
        "   journal = {npj Computational Materials},\n",
        "   volume = {8},\n",
        "   number = {1},\n",
        "   pages = {213},\n",
        "   ISSN = {2057-3960},\n",
        "   DOI = {10.1038/s41524-022-00896-3},\n",
        "   url = {https://doi.org/10.1038/s41524-022-00896-3},\n",
        "   year = {2022}}\n",
        "```\n",
        "\n",
        "# LICENSE\n",
        "This project is licensed under the Apache License Version 2.0, January 2004 - see the LICENSE file at https://github.com/AndySAnker/ML-MotEx/blob/main/LICENSE for details."
      ],
      "metadata": {
        "id": "FaTiV4jdhxDP"
      }
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "FLXilSzKiaMQ"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}